package ao.ai.classify.decision;

/**
 * User: alex
 * Date: 26-Apr-2010
 * Time: 12:55:48 AM
 */
public class RandomForestBinClassifier
//        implements BinaryLearner
{
//    //-------------------------------------------------------------------------
//    @Override
//    public BinaryClassificationHypothesis learn(
//            List<? extends Example<
//                    ? extends NumericalFeatureList,
//                    ? extends SingleBinaryFeature>>
//                data)
//    {
//        assert data != null &&
//               ! data.isEmpty();
//
//        final Example<? extends NumericalFeatureList,
//                      ? extends SingleBinaryFeature>
//            arbitraryExample = Iterables.get(data, 0);
//
//        final LearningSet examples = new LearningSet();
//        final Classifier  learner  =
//                new ClassifierImpl(
//                        new RandomLearner(
//                                10
//                        ));
//
//        for (Example<? extends NumericalFeatureList,
//                     ? extends SingleBinaryFeature>
//                example : data)
//        {
//            examples.add(
//                    function(
//                            example.output().binaryCategory(),
//                            example.input().doubleValues()
//                    )
//            );
//        }
//
//        learner.set( examples );
//
////        System.out.println(
////                learner.classify(context(true, false, true, true)));
//
//        return new BinaryClassificationHypothesis() {
//            @Override public double probabilityOfPositive(
//                    NumericalFeatureList input) {
//                Prediction guess = learner.classify(
//                        context(input.doubleValues()));
//                return guess.probabilityOf(
//                        new Datum(true));
//            }
//
//            @Override public double probabilityOf(
//                    NumericalFeatureList input, int categoryIndex) {
//                return (categoryIndex == 0)
//                       ? 1.0 - probabilityOfPositive(input)
//                       :       probabilityOfPositive(input);
//            }
//
//            @Override public SingleBinaryFeature predict(
//                    NumericalFeatureList input) {
//                return new BinaryScalar(
//                        Rand.nextBoolean(probabilityOfPositive(input)),
//                        arbitraryExample.output().type());
//            }
//        };
//    }
//
//
//    //-------------------------------------------------------------------------
//    private ao.ai.classify.decision.decision.input.raw.example.Example function(
//            boolean   isPositive,
//            double... input)
//    {
//        return context(input).withTarget(
//                new Datum(isPositive));
//    }
//
//    private Context context(double... vars)
//    {
//        List<Datum> varAttributes = new LinkedList<Datum>();
//        int         type          = 0;
//        for (double var : vars)
//        {
//            varAttributes.add(
//                    new Datum(String.valueOf(type++), var));
//        }
//        return new ContextImpl(varAttributes);
//    }
//
//
//    //-------------------------------------------------------------------------
}
